/**
* @Description:中间件,匹配路由之前和匹配路由之后要做的一些操作
* @DescriptionLink:[Koa中间件]https://www.bilibili.com/video/BV11t411k79h?p=31
* @author 
* @date 2020/9/3
**/
/* 应用场景
* 1.匹配任何路由之前要打印日期
* 2.后台管理登录以后才可以进入后台页面,权限管理 地址栏输入必须要经过中间件
* */
const Koa = require('koa');
const router=require('koa-router')();
const static = require('koa-static');
const app=new Koa();
let port=8888;
router.get('/',ctx=>{
  ctx.body='hello koa';
  console.log(111);
});

//1.应用级中间件
app.use(async (ctx,next)=>{
  console.log(new Date().toLocaleDateString());
  await next();
});
//2.路由中间件[路由中间件的意思就是你匹配到路由没有响应信息,而在当前路由调用next方法,让下一个通向path的去请求]
router.get("/news",async (ctx,next)=>{
  console.log('这是路由中间件,news这没有响应,而调用了next方法让下一个news路由处理');
   await next()
});
router.get("/news",async ctx=>{
  ctx.body="这是一个news路由中间件处理过之后,交由同样的news路由处理";
});
//3.错误处理中间件
app.use(async (ctx,next)=>{
  console.log('这是一个中间件,最先处理');
  next();
  if (ctx.status==404){
    ctx.status=404;
    ctx.body='这是一个404页面'
  }else{
    console.log(ctx.url);
  }
});
app.use(async (ctx, next) => {
  ctx.type = "text/html";
  ctx.body = "<h1>Hello, koa2!</h1>";
  await next();
});

app.use(router.routes()).use(router.allowedMethods()).use(static(__dirname+'/static'));

// 配置静态web服务的中间件
app.listen(port,()=>console.log(`server is running to http://localhost:${port}`));